package edu.northwestern.cbits.purple_robot_manager.probes.builtin; import java.io.IOException; import java.io.InputStream; import java.util.UUID; import org.json.JSONObject; import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.util.Log; import edu.northwestern.cbits.purple_robot_manager.logging.LogManager; import edu.northwestern.cbits.purple_robot_manager.probes.Probe; @SuppressLint("NewApi") public abstract class BluetoothReceiverProbe extends Probe { public final static String PROBE_NAME = "edu.northwestern.cbits.purple_robot_manager.probes.builtin.BluetoothReceiverProbe"; private boolean isRegistered = false; @Override public String name(Context context) { return "Bluetooth test probe"; } @Override public String summary(Context context) { return ""; } @Override public String title(Context context) { return this.name(context); } @Override public String probeCategory(Context context) { return "PIZZA PIE"; } @Override @SuppressWarnings("deprecation") public PreferenceScreen preferenceScreen(Context context, PreferenceManager manager) { PreferenceScreen screen = super.preferenceScreen(context, manager); screen.setTitle(this.title(context)); return screen; } @Override public void enable(Context context) { SharedPreferences prefs = Probe.getPreferences(context); Editor e = prefs.edit(); e.putBoolean("CHANGEME", true); e.commit(); } @Override public void disable(Context context) { SharedPreferences prefs = Probe.getPreferences(context); Editor e = prefs.edit(); e.putBoolean("CHANGEME", false); e.commit(); } @Override public boolean isEnabled(final Context context) { final BluetoothReceiverProbe me = this; if (!this.isRegistered) { // BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); /* * BroadcastReceiver mReceiver = new BroadcastReceiver() { * * @SuppressLint("NewApi") public void onReceive(Context context, * Intent intent) { String action = intent.getAction(); * * Log.e("PRM", "BT RECEIVER " + action); * * if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the * BluetoothDevice object from the Intent BluetoothDevice device = * intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Add * the name and address to an array adapter to show in a ListView * Log.e("PRM", device.getName() + "\n" + device.getAddress()); * * device.fetchUuidsWithSdp(); } else * if(BluetoothDevice.ACTION_UUID.equals(action)) { BluetoothDevice * device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); * Parcelable[] uuidExtra = * intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID); for * (int i=0; i<uuidExtra.length; i++) { Log.e("PRM", "Device: " + * device.getName() + ", " + device + ", Service: " + * uuidExtra[i].toString()); } } } }; // Register the * BroadcastReceiver IntentFilter filter = new * IntentFilter(BluetoothDevice.ACTION_FOUND); * filter.addAction(BluetoothDevice.ACTION_UUID); * * context.registerReceiver(mReceiver, filter); // Don't forget to * unregister during onDestroy * * adapter.startDiscovery(); */ Thread t = new Thread(new Runnable() { @Override public void run() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); try { BluetoothServerSocket server = adapter.listenUsingRfcommWithServiceRecord("Test Service", UUID.fromString("0000112f-0000-1000-8000-00805f9b34fb")); // BluetoothServerSocket server = // adapter.listenUsingRfcommWithServiceRecord("Test Service", // UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66")); BluetoothSocket socket = null; while (true) { try { socket = server.accept(); } catch (IOException e) { break; } if (socket != null) me.manageSocket(socket); } } catch (IOException e) { LogManager.getInstance(context).logException(e); } } }); t.start(); this.isRegistered = true; } return true; } protected void manageSocket(BluetoothSocket socket) throws IOException { Log.e("PR", "GOT BLUETOOTH CONNECTION: " + socket.getRemoteDevice().getName()); int read = 0; byte[] buffer = new byte[1024]; InputStream in = socket.getInputStream(); while ((read = in.read(buffer, 0, buffer.length)) != -1) { String s = new String(buffer, 0, read); Log.e("PR", "READ " + s + " BYTES!"); } socket.close(); } @Override public JSONObject fetchSettings(Context context) { // TODO: Implement! return null; } }